const { verifyToken } = require('../utils/common')
const { tokenExpiredError, invalidToken, notAdmin, serverError } = require('../constant/error.type')

// 验证token
const auth = async(ctx, next) => {
  const { authorization = '' } = ctx.request.header
  const token = authorization.replace('Bearer ', '')

  try {
    // user 返回payload的信息（id, user_name, is_admin）
    const user = verifyToken(token)
    ctx.state.user = user
    // ctx.body = user

  } catch (error) {
    switch (error.name) {
      case 'TokenExpiredError':
        console.error('token已过期', error);
        return ctx.app.emit('error', tokenExpiredError, ctx)
      case 'JsonWebTokenError':
        console.error('token无效', error);
        return ctx.app.emit('error', invalidToken, ctx)
      default:
        return ctx.app.emit('error', serverError, ctx)
    }
  }
  await next()
}

// 验证是否有管理员权限
const hadAdminPermission = async(ctx, next) => {
  const { is_admin } = ctx.state.user
  // console.log(is_admin)
  if(!is_admin) {
    console.error('该用户没有管理员权限', ctx.state.user)
    return ctx.app.emit('error', notAdmin, ctx)
  }
  await next()
}


module.exports = {
  auth,
  hadAdminPermission
}